package com.samba.beans;

import java.util.Date;
import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import com.samba.entites.CreditProjetUtilisateur;
import com.samba.entites.Preteur;
import com.samba.entites.Projet;
import com.samba.entites.Utilisateur;
import com.samba.sessions.MemberServiceDAO;

@Stateless
public class MemberServiceBean  implements MemberServiceDAO{
	
	@PersistenceContext(unitName = "GestionMicroCredit")
	private EntityManager em;

	public MemberServiceBean(){	
	}
	

	public List<CreditProjetUtilisateur> findAllProjetFinancer(int userId) {
		Query q = em.createNamedQuery("findAllProjetsByUserId");
		q.setParameter("userId", userId);
		return q.getResultList();
	}

	public List<Projet> findAllProjet(int userId) {
		// a implementer
		return null;
	}

	public Projet findProjet(int userId, int projetId) {
		{
			Projet localRes = em.find(Projet.class, projetId);
			if(localRes.getId() == projetId)
			{
				localRes.getPreteurs().size();
				return localRes;
			}
			else
				return null;
		}
	}

	public void removeProjet(int userId, int resourceId) {
		Projet p = findProjet(userId, resourceId);
		em.remove(p);
	}

	public Projet addProjet(Projet Projet) {
		Projet.setDateDePublication(new Date());
		em.persist(Projet);
		return Projet;
	}

	@Override
	public Projet updateProjet(Projet projet) {
		Projet localRes = em.find(Projet.class, projet.getId());
		if(localRes.getId() == projet.getId())
		{
			localRes.setActive(projet.getActive());
			localRes.setAuteur(projet.getAuteur());
			localRes.getPreteurs().clear();
			
			if(projet.getPreteurs().size() > 0)
			{
			// localRes.getCategories.addALL(resource.getCategories());
			
			   for(Utilisateur p : projet.getPreteurs())
			   {
				   localRes.getPreteurs().add(em.find(Preteur.class, p.getId()));
			   }
		    }
			localRes.setDefaultDurePret(projet.getDefaultDurePret());
			localRes.setDetails(projet.getDetails());
			
			if(projet.getLogo() != null)
				if(projet.getLogo().length > 0)
					localRes.setLogo(projet.getLogo());
				else
					localRes.setLogo(null);
			localRes.setTiltle(projet.getTiltle());
			localRes.setTypeFk(projet.getTypeFk());
			localRes.setValid(projet.isValid());
			return localRes;
	  }
		else
		{
			return projet;	
		}
		
    }
	public void validateCredit(int projetFinancerId) {
		CreditProjetUtilisateur cpl = em.find(CreditProjetUtilisateur.class, projetFinancerId);
		em.remove(cpl);
		
		// TODO => pour envoyer un email 
	}
	public void notValidateCredit(int projetFinancerId) {
		CreditProjetUtilisateur lr = em.find(CreditProjetUtilisateur.class, projetFinancerId);
		em.remove(lr);
	}
	@Override
	public void returnedProjet(int projetCredit) {
		// TODO Auto-generated method stub
		CreditProjetUtilisateur  cpu = em.find(CreditProjetUtilisateur.class, projetCredit);
		cpu.setEtat(CreditProjetUtilisateur.EtatFinancementCredit.FINANCE);
	}
}

